package com.starinside.wp.controller;

import com.starinside.wp.config.WxMpProperties;
import com.starinside.wp.service.wx.VIPMpService;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.menu.WxMpGetSelfMenuInfoResult;
import me.chanjar.weixin.mp.bean.menu.WxMpMenu;
import org.apache.commons.lang.StringUtils;
import org.beetl.ext.fn.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.net.URL;

import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType;

/**
 * @author Binary Wang(https://github.com/binarywang)
 */
@RestController
@RequestMapping("/wx/menu/{appid}/{appsecret}")
public class WxMenuController {
    private WxMpService wxService;

    @Autowired
    private VIPMpService vipWxService;

//    @Autowired
//    private WxMpProperties properties;

    @Autowired
    public WxMenuController(WxMpService wxService) {
        this.wxService = wxService;
    }

//    /**
//     * <pre>
//     * 自定义菜单创建接口
//     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN
//     * 如果要创建个性化菜单，请设置matchrule属性
//     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
//     * </pre>
//     *
//     * @return 如果是个性化菜单，则返回menuid，否则返回null
//     */
//    @PostMapping("/create")
//    public String menuCreate(@PathVariable String appid, @RequestBody WxMenu menu) throws WxErrorException {
//        return this.wxService.switchover1(appid).getMenuService().menuCreate(menu);
//    }

    @GetMapping("/create")
    public String menuCreateSample(HttpServletRequest req, HttpServletResponse resp,
            @PathVariable String appid, @PathVariable String appsecret) throws WxErrorException, MalformedURLException {

        WxMpService service = wxService;
        if(StringUtils.isNotBlank(appid) && StringUtils.isNotBlank(appsecret)){
            vipWxService.makeVIPAppIdValid(appid, appsecret);
            service = vipWxService;
        }

        String serverName = req.getServerName();
        String host = req.getScheme() + "://" + serverName;
        //2c90805b6cacba9c016cbd62592e00f0.vip.mp.starinside.net

        String actionBaseUrl = host + "/wx/portal/action.do?action=";

        /*

        个人中心：http://mp.dev.starinside.cn/#/accountCenter

        宝宝考勤：http://mp.dev.starinside.cn/#/timeline
        评测报告：http://mp.dev.starinside.cn/#/evlRecords
        园区动态：http://mp.dev.starinside.cn/#/dynamic
        时光轴：http://mp.dev.starinside.cn/#/timeline

        亲子游戏：http://mp.dev.starinside.cn/#/parantAndKidsGame
        成长指导：http://mp.dev.starinside.cn/#/growGuide
        月子食谱：http://mp.dev.starinside.cn/#/monthRecipe
        宝宝食谱：http://mp.dev.starinside.cn/#/babyRecipe

        能力评测详情：http://mp.dev.starinside.cn/#/evalute？id=24135421
        儿保评测详情：http://mp.dev.starinside.cn/#/health？id=24135421
        观测点详情：http://mp.dev.starinside.cn/#/observation？id=24135421

         */
        WxMenu menu = new WxMenu();
        WxMenuButton button1 = new WxMenuButton();
        button1.setName("宝宝园区");

        WxMenuButton button2 = new WxMenuButton();
        button2.setName("育儿助手");

        WxMenuButton button3 = new WxMenuButton();
        button3.setType(MenuButtonType.VIEW);
        button3.setName("个人中心");
        button3.setUrl(host + "/redirect/accountCenter");

        menu.getButtons().add(button1);
        menu.getButtons().add(button2);
        menu.getButtons().add(button3);

        WxMenuButton button11 = new WxMenuButton();
        button11.setType(MenuButtonType.VIEW);
        button11.setName("考勤记录");
        button11.setUrl(host  + "/redirect/checkin");

        WxMenuButton button12 = new WxMenuButton();
        button12.setType(MenuButtonType.VIEW);
        button12.setName("评测报告");
        button12.setUrl(host  + "/redirect/evlRecords");

        WxMenuButton button15 = new WxMenuButton();
        button15.setType(MenuButtonType.VIEW);
        button15.setName("营养计划");
        button15.setUrl(host  + "/redirect/recipe");

        WxMenuButton button13 = new WxMenuButton();
        button13.setType(MenuButtonType.VIEW);
        button13.setName("园区动态");
        button13.setUrl(host  + "/redirect/dynamic");

        WxMenuButton button14 = new WxMenuButton();
        button14.setType(MenuButtonType.VIEW);
        button14.setName("时光轴");
        button14.setUrl(host  + "/redirect/timeline");

        WxMenuButton button21 = new WxMenuButton();
        button21.setType(MenuButtonType.VIEW);
        button21.setName("亲子游戏");
        button21.setUrl(host  + "/redirect/parantAndKidsGame");

        WxMenuButton button22 = new WxMenuButton();
        button22.setType(MenuButtonType.VIEW);
        button22.setName("成长指导");
        button22.setUrl(host  + "/redirect/growGuide");

        WxMenuButton button23 = new WxMenuButton();
        button23.setType(MenuButtonType.VIEW);
        button23.setName("月子食谱");
        button23.setUrl(host  + "/redirect/monthRecipe");

        WxMenuButton button24 = new WxMenuButton();
        button24.setType(MenuButtonType.VIEW);
        button24.setName("宝宝食谱");
        button24.setUrl(host  + "/redirect/babyRecipe");

        button1.getSubButtons().add(button11);
        button1.getSubButtons().add(button12);
        button1.getSubButtons().add(button15);
        button1.getSubButtons().add(button13);
        button1.getSubButtons().add(button14);
        button2.getSubButtons().add(button21);
        button2.getSubButtons().add(button22);
        button2.getSubButtons().add(button23);
        button2.getSubButtons().add(button24);

        return service.getMenuService().menuCreate(menu);
    }
//
//    /**
//     * <pre>
//     * 自定义菜单创建接口
//     * 详情请见： https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN
//     * 如果要创建个性化菜单，请设置matchrule属性
//     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
//     * </pre>
//     *
//     * @return 如果是个性化菜单，则返回menuid，否则返回null
//     */
//    @PostMapping("/createByJson")
//    public String menuCreate(@PathVariable String appid, @RequestBody String json) throws WxErrorException {
//        return this.wxService.switchover1(appid).getMenuService().menuCreate(json);
//    }
//
//    /**
//     * <pre>
//     * 自定义菜单删除接口
//     * 详情请见: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141015&token=&lang=zh_CN
//     * </pre>
//     */
//    @GetMapping("/delete")
//    public void menuDelete(@PathVariable String appid) throws WxErrorException {
//        this.wxService.switchover1(appid).getMenuService().menuDelete();
//    }
//
//    /**
//     * <pre>
//     * 删除个性化菜单接口
//     * 详情请见: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
//     * </pre>
//     *
//     * @param menuId 个性化菜单的menuid
//     */
//    @GetMapping("/delete/{menuId}")
//    public void menuDelete(@PathVariable String appid, @PathVariable String menuId) throws WxErrorException {
//        this.wxService.switchover1(appid).getMenuService().menuDelete(menuId);
//    }
//
//    /**
//     * <pre>
//     * 自定义菜单查询接口
//     * 详情请见： https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141014&token=&lang=zh_CN
//     * </pre>
//     */
//    @GetMapping("/get")
//    public WxMpMenu menuGet(@PathVariable String appid) throws WxErrorException {
//        return this.wxService.switchover1(appid).getMenuService().menuGet();
//    }
//
//    /**
//     * <pre>
//     * 测试个性化菜单匹配结果
//     * 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
//     * </pre>
//     *
//     * @param userid 可以是粉丝的OpenID，也可以是粉丝的微信号。
//     */
//    @GetMapping("/menuTryMatch/{userid}")
//    public WxMenu menuTryMatch(@PathVariable String appid, @PathVariable String userid) throws WxErrorException {
//        return this.wxService.switchover1(appid).getMenuService().menuTryMatch(userid);
//    }
//
//    /**
//     * <pre>
//     * 获取自定义菜单配置接口
//     * 本接口将会提供公众号当前使用的自定义菜单的配置，如果公众号是通过API调用设置的菜单，则返回菜单的开发配置，而如果公众号是在公众平台官网通过网站功能发布菜单，则本接口返回运营者设置的菜单配置。
//     * 请注意：
//     * 1、第三方平台开发者可以通过本接口，在旗下公众号将业务授权给你后，立即通过本接口检测公众号的自定义菜单配置，并通过接口再次给公众号设置好自动回复规则，以提升公众号运营者的业务体验。
//     * 2、本接口与自定义菜单查询接口的不同之处在于，本接口无论公众号的接口是如何设置的，都能查询到接口，而自定义菜单查询接口则仅能查询到使用API设置的菜单配置。
//     * 3、认证/未认证的服务号/订阅号，以及接口测试号，均拥有该接口权限。
//     * 4、从第三方平台的公众号登录授权机制上来说，该接口从属于消息与菜单权限集。
//     * 5、本接口中返回的图片/语音/视频为临时素材（临时素材每次获取都不同，3天内有效，通过素材管理-获取临时素材接口来获取这些素材），本接口返回的图文消息为永久素材素材（通过素材管理-获取永久素材接口来获取这些素材）。
//     *  接口调用请求说明:
//     * http请求方式: GET（请使用https协议）
//     * https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN
//     * </pre>
//     */
//    @GetMapping("/getSelfMenuInfo")
//    public WxMpGetSelfMenuInfoResult getSelfMenuInfo(@PathVariable String appid) throws WxErrorException {
//        return this.wxService.switchover1(appid).getMenuService().getSelfMenuInfo();
//    }
}
